package net.dgg.iboss.sc.backservice.task.util;

import com.alibaba.fastjson.JSON;
import net.dgg.framework.tac.mq.rabbitmq.dto.DggDelayProducerParams;
import net.dgg.framework.tac.mq.rabbitmq.queue.DggMessageSendUtil;
import net.dgg.iboss.sc.backservice.task.constant.ScProductConstant;
import net.dgg.iboss.sc.backservice.task.constant.SystemCommonConstant;
import net.dgg.iboss.sc.backservice.task.entity.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;


/**
 * @Author sdx
 * @Description 生产订单更新备注操作时给订单对应的企管家推送消息(推送至MQ消费)
 * @Created data 2019/8/30 09:30
 */
public class MQMessageSendUtil {

    protected static Logger logger = LoggerFactory.getLogger(MQMessageSendUtil.class);

    //日期格式化
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void ucMessageSend(CustomerRecord customerRecord){
        boolean flag = DggMessageSendUtil.putMessage("net.dgg.iboss.uc.consumer.CustomerRecordConsumer", customerRecord);
        if (!flag){
            logger.info("向UC推送消息失败");
        }
    }
    /**
     * 向企大顺发送消息
     *
     * @param productOrder 法律订单对象
     * @param node             节点对象
     * @param userEntity       用户对象
     */

    public static void qdsMessageSend(ProductOrder productOrder, ProductNode node, UserEntity userEntity) {

        //构建同步消息对象
        QdsUpdateScOrderVo qdsVo = buildQdsMsgParams(productOrder, node, userEntity);

        //将消息同步到mq
        boolean sendResult = putMessageMq(SystemCommonConstant.QDS_STATUS_SYNC, qdsVo);

        //没有同步成功
        if (!sendResult) {
            logger.info("向企大顺消息发送失败");
        }

    }

    /**
     * 企大宝由上市环境推送消息到非上市环境，用第二数据源推送
     */
    public static boolean putMessageMq(String queueName, Object data){
        DggDelayProducerParams delayProducerParams = new DggDelayProducerParams();
        delayProducerParams.setData(data);
        delayProducerParams.setQueueName(queueName);
        delayProducerParams.setSysCode(InitComponent.appId);
        delayProducerParams.setNode(InitComponent.mqIp);
        return DggMessageSendUtil.putDelayMessage(delayProducerParams);
    }

    /**
     * 消息参数构建
     *
     * @param productOrder 法律订单
     *                         //   * @param overdueStatus    是否超期 0-否 1-超期
     *                         //   * @param overdueTime      超期时间
     *                         //    * @param opertionType     操作类型（用户封装参数）
     * @param userEntity       用户
     *                         // * @param completedNode    当前最新完成节点
     * @return
     */
    protected static QdsUpdateScOrderVo buildQdsMsgParams(ProductOrder productOrder, ProductNode node, UserEntity userEntity) {

        //与企大顺生产中心同步状态对象
        QdsUpdateScOrderVo qdsVo = new QdsUpdateScOrderVo();
        qdsVo.setId(productOrder.getId());//生产中心id
        qdsVo.setOrderStatus(productOrder.getStatus());//订单状态
        qdsVo.setBeforeOrderStatus(productOrder.getBeforeStatus());//订单上一个状态
        qdsVo.setHandlerId(productOrder.getFlowUserId());//办理人id
        qdsVo.setHandlerName(productOrder.getFlowUserName());//办理人名字
        qdsVo.setBusinessCode(productOrder.getBusinessTypeCode());//业态信息
        qdsVo.setRemark(productOrder.getRemark());//备注
        qdsVo.setHandlerId(productOrder.getFlowUserId());//办理人id

        //节点不为空
        if (node != null) {
            qdsVo.setEndNodeId(node.getId());//最新完成节点id
            qdsVo.setEndNodeCode("");//最新完成节点code
            qdsVo.setEndNodeName(node.getName());//最新完成节点名称
        }

        //根据订单状态，设置特殊值
        switch (productOrder.getStatus()) {
            case ScProductConstant.SC_ORDER_IN_PROCESS://当前节点是办理中,更新接收人信息
                qdsVo.setReceiveUserId(productOrder.getReceiverId());//接单人id
                qdsVo.setReceiveUserName(productOrder.getReceiverName());//接单人名字
                qdsVo.setReceiveTime(dateFormat.format(productOrder.getReceiveTime()));//接单时间
                break;
            case ScProductConstant.SC_ORDER_FINISHED_CHARGEBACK://已退单
                qdsVo.setReturnJson(JSON.toJSONString(userEntity));//退回人
                qdsVo.setEndTime(dateFormat.format(productOrder.getAbandonReasonTime()));//退回时间
                break;
            case ScProductConstant.SC_ORDER_OVER://生产正常完结
                qdsVo.setEndUserJson(JSON.toJSONString(userEntity));//完结人
                qdsVo.setEndTime(dateFormat.format(productOrder.getUpdateTime()));//完结时间
                break;
            case ScProductConstant.SC_ORDER_OVER_OVERDUE://生产超期完结
                qdsVo.setEndUserJson(JSON.toJSONString(userEntity));//完结人
                qdsVo.setEndTime(dateFormat.format(productOrder.getUpdateTime()));//完结时间
                break;
            case ScProductConstant.SC_ORDER_OVER_FORCE://生产强制完结
                qdsVo.setEndUserJson(JSON.toJSONString(userEntity));//完结人
                qdsVo.setEndTime(dateFormat.format(productOrder.getUpdateTime()));//完结时间
                break;
            case ScProductConstant.SC_ORDER_OVER_CERTIFICATE://证书完结
                qdsVo.setEndUserJson(JSON.toJSONString(userEntity));//完结人
                qdsVo.setEndTime(dateFormat.format(productOrder.getUpdateTime()));//完结时间
                break;
            default:
                break;
        }

        return qdsVo;
    }

}
